home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
-
-
- PRODUCT : Borland Pascal/Turbo Pascal NUMBER : 1203
- VERSION : 7.0
- OS : All
- DATE : December 11, 1992 PAGE : 1/7
-
- TITLE : Using Validators in OWL Applications
-
-
-
-
- Starting with version 7.0, Borland Pascal introduced
- Validator objects for Turbo Vision and the Object Windows
- Library. These objects help guide the user when they are entering
- data in Edit fields. The purpose of this TI is to introduce the
- user to the idea of using Validators in OWL applications.
- Validators are very flexible objects which can play several
- different roles in your program. A typical validator might ensure
- that the user can only enter numbers within a certain range into
- a particular field. Another common use for Validators might be to
- ensure that users enter stock numbers that begin with two
- alphanumeric characters, then include a dash followed by four
- numbers. An example of this type of stock number might look like
- this: WD-3344. These are only two examples of the many different
- types of validators you can create for your programs.
- Validators are extremely easy to use. In most cases you only
- need to add one line to your code. Suppose you want to add a
- validator to an edit field which will ensure that the user can
- only enter numbers between five and eight. First you would
- initialize your edit field, just as you have always done:
-
- AEdit := New(PEdit, InitResource(@Self, Cm_NumEdit, 50));
-
- The next step is to initialize the validator. The following line
- of code turns the trick:
-
- AEdit^.SetValidator(New(PRangeValidator, Init(5, 8)));
-
- That's all you need to do. Now the only characters the user can
- enter into the control will have to fall within the specified
- range.
- When compiled, the program and resource script included in
- this Tech Info Sheet help demonstrate many of the primary
- features of the validator unit. Included in the example are two
- range validators, four picture validators and one custom
- validator. The range validators ensure that input falls inside a
- particular numeric range. One of the picture validators helps
- guide the user while he enters a date, and another ensures that
- the user follows a valid format while entering a social security
- number. The other validators guide the user while he enters a
- stock number and a special entry that must begin with the letters
- 'MIKE' followed by a single number. In order to show you how to
- create your own Validators, we include a descendant of
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRODUCT : Borland Pascal/Turbo Pascal NUMBER : 1203
- VERSION : 7.0
- OS : All
- DATE : December 11, 1992 PAGE : 2/7
-
- TITLE : Using Validators in OWL Applications
-
-
-
-
- TPxPictureValidator called TSamValidator which gives you an idea
- of how to control input on a character by character basis.
- Validators usually work on a letter by letter or field by
- field basis. That is, they will check a user's input either as he
- enters each character, or later on, when he exits a field. If you
- want to check the data only when the user closes an entire
- screenful of data, then you should examine the TMyEdit object,
- presented below. In this object, we override the TEdit methods
- that would normally ensure that a user's input was checked as he
- leaves a field. As a result, the data is checked only when the
- user closes the dialog in which the edit fields reside.
-
-
-
-
-
-
- {************************************************}
- { }
- { Turbo Pascal 7.0 for Windows }
- { Demo program }
- { Copyright (c) 1992 by Borland International }
- { }
- {************************************************}
-
- program ValidExp;
-
- uses WinTypes, WinProcs, OWindows, ODialogs, Strings, Validate,
- BWCC;
-
- {$R ValidExp}
-
- const
- Cm_Dialog = 101;
- Cm_NumEdit = 102;
- Cm_NumEdit2 = 103;
- Cm_DateEdit = 104;
- Cm_StockEdit = 105;
- Cm_SSNEdit = 106;
- Cm_SamEdit = 107;
- Cm_MikeEdit = 108;
-
- type
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRODUCT : Borland Pascal/Turbo Pascal NUMBER : 1203
- VERSION : 7.0
- OS : All
- DATE : December 11, 1992 PAGE : 3/7
-
- TITLE : Using Validators in OWL Applications
-
-
-
-
- TMyApplication = object(TApplication)
- procedure InitMainWindow; virtual;
- end;
-
- type
- PMyWindow = ^TMyWindow;
- TMyWindow = object(TWindow)
- constructor Init(AParent: PWindowsObject; AName: PChar);
- procedure cmDialog(var Msg: TMessage);
- virtual cm_First + cm_Dialog;
- end;
-
- PMyEdit = ^TMyEdit;
- TMyEdit = Object(TEdit)
- procedure WMKillFocus(var Msg: TMessage);
- virtual wm_First + wm_KillFocus;
- procedure WmGetDlgCode(var Msg: TMessage);
- virtual wm_First + wm_GetDlgCode;
- end;
-
- PMyDialog = ^TMyDialog;
- TMyDialog = Object(TDialog)
- constructor Init(AParent: PWindowsObject; AName: PChar);
- end;
-
- PSamValidator = ^TSamValidator;
- TSamValidator = object(TPxPictureValidator)
- function IsValid(const S: string): Boolean; virtual;
- procedure Error; virtual;
- end;
-
- procedure TMyEdit.WMKillFocus(var Msg: TMessage);
- begin
- DefWndProc(Msg)
- end;
-
- procedure TMyEdit.WMGetDlgCode(var Msg: TMessage);
- begin
- DefWndProc(Msg);
- end;
-
- {--------------------------------------------------}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRODUCT : Borland Pascal/Turbo Pascal NUMBER : 1203
- VERSION : 7.0
- OS : All
- DATE : December 11, 1992 PAGE : 4/7
-
- TITLE : Using Validators in OWL Applications
-
-
-
-
- { TMyWindow's method implementations: }
- {--------------------------------------------------}
-
-
- constructor TMyWindow.Init(AParent: PWindowsObject;
- AName: PChar);
- begin
- TWindow.Init(AParent, AName);
- Attr.Menu := LoadMenu(HInstance, 'Menu_1');
- end;
-
- procedure TMyWindow.cmDialog(var Msg: TMessage);
- var
- D: PDialog;
- begin
- D := New(PMyDialog, Init(@Self, 'Dialog_1'));
- Application^.ExecDialog(D);
- end;
-
- {--------------------------------------------------}
- { TMyWindow's method implementations: }
- {--------------------------------------------------}
-
- constructor TMyDialog.Init(AParent: PWindowsOBject;
- AName: PChar); var
- AEdit: PEdit;
- MyEdit: PMyEdit;
- begin
- TDialog.Init(AParent, AName);
- AEdit := New(PEdit, InitResource(@Self, Cm_NumEdit, 50));
- AEdit^.SetValidator(New(PRangeValidator, Init(5, 8)));
- MyEdit := New(PMyEdit, InitResource(@Self, Cm_NumEdit2, 10));
- MyEdit^.SetValidator(New(PRangeValidator, Init(1, 10)));
- AEdit := New(PEdit, InitResource(@Self, Cm_DateEdit, 50));
- AEdit^.SetValidator(New(PPXPictureValidator,
- Init('{#[#]}/{#[#]}/{##[##]}', True)));
- AEdit := New(PEdit, InitResource(@Self, Cm_StockEdit, 50));
- AEdit^.SetValidator(New(PPXPictureValidator,
- Init('&#-####', True)));
- AEdit := New(PEdit, InitResource(@Self, Cm_SSNEdit, 50));
- AEdit^.SetValidator(New(PPXPictureValidator,
- Init('###-##-####', True)));
- AEdit := New(PEdit, InitResource(@Self, Cm_SamEdit, 50));
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRODUCT : Borland Pascal/Turbo Pascal NUMBER : 1203
- VERSION : 7.0
- OS : All
- DATE : December 11, 1992 PAGE : 5/7
-
- TITLE : Using Validators in OWL Applications
-
-
-
-
- AEdit^.SetValidator(New(PSamValidator, Init('&&', True)));
- AEdit := New(PEdit, InitResource(@Self, Cm_MikeEdit, 50));
- AEdit^.SetValidator(New(PPXPictureValidator,
- Init('Mike#', True)));
- end;
-
- {--------------------------------------------------}
- { TSamValidator's method implementations: }
- {--------------------------------------------------}
-
- function IsNumber(Chr: Char): Boolean; near; assembler;
- asm
- XOR AL,AL
- MOV Ch,Chr
- CMP Ch,'0'
- JB @@1
- CMP Ch,'9'
- JA @@1
- INC AL
- @@1:
- end;
-
- function TSamValidator.IsValid(const S: string): Boolean;
- var
- S1,S2: array[0..5] of Char;
- begin
- StrPCopy(S2, S);
- IsValid := False;
- StrLCopy(S1, S2, 3);
- if StrIComp(S1, 'Sam') = 0 then IsValid := True
- else Exit;
- if IsNumber(S2[4]) then IsValid := True;
- end;
-
- procedure TSamValidator.Error;
- begin
- MessageBox(0,
- 'Enter the word Sam followed by a number. Example: Sam1',
- nil, mb_IconExclamation + mb_OK);
- end;
-
- {---------------------------------------------------}
- { TMyApplication's method implementations: }
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRODUCT : Borland Pascal/Turbo Pascal NUMBER : 1203
- VERSION : 7.0
- OS : All
- DATE : December 11, 1992 PAGE : 6/7
-
- TITLE : Using Validators in OWL Applications
-
-
-
-
- {---------------------------------------------------}
- procedure TMyApplication.InitMainWindow;
- begin
- MainWindow := New(PMyWindow,
- Init(nil, 'Sample ObjectWindows Program'));
- end;
-
-
- {--------------------------------------------------}
- { Main program: }
- {--------------------------------------------------}
-
- var
- MyApp: TMyApplication;
-
- begin
- MyApp.Init('MyProgram');
- MyApp.Run;
- MyApp.Done;
- end.
-
-
-
- MENU_1 MENU
- BEGIN
- MENUITEM "E&xit", 24340
- MENUITEM "&Dialog", 101
- END
-
-
- DIALOG_1 DIALOG 37, 28, 196, 163
- STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION |
- WS_SYSMENU CLASS "BorDlg"
- CAPTION "Validator Dialog"
- BEGIN
- CONTROL "", 102, "EDIT", ES_LEFT | WS_CHILD | WS_VISIBLE |
- WS_BORDER | WS_TABSTOP, 124, 12, 59, 12
- CONTROL "", 103, "EDIT", ES_LEFT | WS_CHILD | WS_VISIBLE |
- WS_BORDER | WS_TABSTOP, 123, 29, 59, 12
- CONTROL "", 104, "EDIT", ES_LEFT | WS_CHILD | WS_VISIBLE |
- WS_BORDER | WS_TABSTOP, 123, 46, 59, 12
- CONTROL "", 105, "EDIT", ES_LEFT | WS_CHILD | WS_VISIBLE |
- WS_BORDER | WS_TABSTOP, 123, 63, 59, 12
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRODUCT : Borland Pascal/Turbo Pascal NUMBER : 1203
- VERSION : 7.0
- OS : All
- DATE : December 11, 1992 PAGE : 7/7
-
- TITLE : Using Validators in OWL Applications
-
-
-
-
- CONTROL "", 106, "EDIT", ES_LEFT | WS_CHILD | WS_VISIBLE |
- WS_BORDER | WS_TABSTOP, 123, 80, 59, 12
- CONTROL "", 107, "EDIT", ES_LEFT | WS_CHILD | WS_VISIBLE |
- WS_BORDER | WS_TABSTOP, 123, 97, 59, 12
- CONTROL "", 108, "EDIT", ES_LEFT | WS_CHILD | WS_VISIBLE |
- WS_BORDER | WS_TABSTOP, 123, 114, 59, 12
- CONTROL "Button", 2, "BorBtn", 1 | WS_CHILD | WS_VISIBLE |
- WS_TABSTOP, 53, 138, 32, 20
- CONTROL "Button", 1, "BorBtn", 1 | WS_CHILD | WS_VISIBLE |
- WS_TABSTOP, 112, 138, 32, 20
- CONTROL "Valid entries are 1-10 (No Tab)", -1, "STATIC",
- SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 19, 12, 101, 10
- CONTROL "Enter a date", -1, "STATIC", SS_LEFT | WS_CHILD |
- WS_VISIBLE | WS_GROUP, 80, 46, 40, 10
- CONTROL "Enter Stock Number (AANN-NNNN)", -1, "STATIC",
- SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 11, 63, 110, 10
- CONTROL "Enter Social Security Num", -1, "STATIC", SS_LEFT |
- WS_CHILD | WS_VISIBLE | WS_GROUP, 34, 80, 86, 8
- CONTROL "Enter SAM followed by number", -1, "STATIC",
- SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 20, 97, 100, 10
- CONTROL "Enter MIKE followed by number", -1, "STATIC",
- SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 17, 114, 103, 10
- CONTROL "", 106, "BorShade", 32774 | WS_CHILD | WS_VISIBLE,
- 6, 7, 184, 125
- CONTROL "Valid entries are 5-8 (Tab Ok)", -1, "STATIC",
- SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 19, 29, 96, 10
- END
-
- DISCLAIMER: You have the right to use this technical information
- subject to the terms of the No-Nonsense License Statement that
- you received with the Borland product to which this information
- pertains.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-